package day03;

/*
构造方法：跟类同名的方法。
         new一个对象时调用。方便创建对象。

 */
public class Demo03 {
    public static void main(String[] args) {
        // Animal() 是类的构造方法。类中没有定义这个方法，系统会默认提供无参的构造方法。
        Animal animal = new Animal();

        animal.name = "阿黄";
        animal.gender = "公";
        animal.weight = 40;
        animal.height = 1.1;

        // 调用自定义的构造方法创建对象
        Animal cat = new Animal("小花", "母", 10, 0.5);
        Animal bird = new Animal("喜鹊");

        System.out.println(cat);
        System.out.println(bird);
        // println打印对象时，会自动调用toString方法的。
        System.out.println(animal);
        // cat.toString()  cat 的效果一样
        System.out.println(cat.toString());
    }
}

class Animal {
    String name;
    String gender; // 性别
    double weight; // 体重
    double height; // 高度

    // 一般在构造方法中给属性赋值
    Animal(String n, String g, double w, double h) {
        name = n;
        gender = g;
        weight = w;
        height = h;
    }

    Animal(String n) { // 必填，其他选填
        name = n;
    }

    // 显式的加了构造方法，系统默认无参的构造方法就不存在了
    Animal() {
    }

    /*
    一个类，如果没写从哪个类继承，默认是从Object继承的。
    toString是父类的方法，把对象转成字符串，方便打印。
     */
    public String toString() {
        return "Animal{name=" + name +
                ",gender=" + gender +
                ",weight=" + weight +
                ",heigth=" + height + "}";
    }
}

// 构造方法、toString方法可以用IDE自动生成。
class Animal1 {
    String name;
    String gender;
    double weight;
    double height;

    /*
    this --->  python self
    用来区分成员变量还是局部变量。this表示对象。
    (String name, String gender, double weight, double height) 是局部变量，与成员变量同名。
    this.属性名
    this.方法名()
     */
    public Animal1(String name, String gender, double weight, double height) {
        this.name = name;
        this.gender = gender;
        this.weight = weight;
        this.height = height;
    }

    public Animal1(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Animal1{" +
                "name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", weight=" + weight +
                ", height=" + height +
                '}';
    }
}
